//package run.siyuan.rabbitmq.demo.consumer;
//
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.rabbitmq.client.Channel;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.amqp.support.AmqpHeaders;
//import org.springframework.messaging.handler.annotation.Header;
//import org.springframework.stereotype.Component;
//import run.siyuan.common.constant.rabbitmq.Constants;
//
//import java.io.IOException;
//
//@Slf4j
//@Component
//public class ConsumerService {
//
//    @RabbitListener(queues = Constants.SIYUAN_RABBITMQ_TEST_QUEUE_MESSAGE, ackMode = "MANUAL")
//    public void consumerMsg(String message, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, Channel channel) throws IOException {
//        try {
//            log.info("{} : Queue 收到的消息：{}", Constants.SIYUAN_RABBITMQ_TEST_QUEUE, JSONUtil.parseObj(message));
//            JSONObject jsonObject = JSONUtil.parseObj(message);
//            if (jsonObject.getInt("id") == 1) {
//                throw new Exception("id == 1");
//            }
//            // RabbitMQ的ack机制中，第二个参数返回true，表示需要将这条消息投递给其他的消费者重新消费
//            channel.txSelect();
//            channel.basicAck(deliveryTag, false);
//            channel.txCommit();
//        } catch (Exception e) {
//            e.printStackTrace();
//            log.info("异常:{}", e.getMessage());
//            // 第三个参数true，表示这个消息会重新进入队列
//            channel.basicNack(deliveryTag, false, false);
//        }
//    }
//
//}
